home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Den Norske Hjemmedataklubben / dNh PD Disk Nr.42 (1992)(Data-Tronic AS)(NO)[Music Comp].zip / dNh PD Disk Nr.42 (1992)(Data-Tronic AS)(NO)[Music Comp].adf / PT-Play.s < prev    next >
Text File  |  1990-12-18  |  22KB  |  1,123 lines

  1. ;**************************************************
  2. ;*    ----- Protracker V2.3A Playroutine -----    *
  3. ;**************************************************
  4.  
  5. ; VBlank Version 2:
  6. ; Call mt_init to initialize the routine, then call mt_music on
  7. ; each vertical blank (50 Hz). To end the song and turn off all
  8. ; voices, call mt_end.
  9.  
  10. ; This playroutine is not very fast, optimized or well commented,
  11. ; but all the new commands in PT2.3A should work.
  12. ; If it's not good enough, you'll have to change it yourself.
  13. ; We'll try to write a faster routine soon...
  14.  
  15. ; Changes from V1.0C playroutine:
  16. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  17. ;   You'll have to double all vib. depths on old PT modules.
  18. ; - Funk Repeat changed to Invert Loop.
  19. ; - Period set back earlier when stopping an effect.
  20.  
  21. DMAWait = 300 ; Set this as low as possible without losing low notes.
  22.  
  23. n_note        EQU    0  ; W
  24. n_cmd        EQU    2  ; W
  25. n_cmdlo        EQU    3  ; B
  26. n_start        EQU    4  ; L
  27. n_length    EQU    8  ; W
  28. n_loopstart    EQU    10 ; L
  29. n_replen    EQU    14 ; W
  30. n_period    EQU    16 ; W
  31. n_finetune    EQU    18 ; B
  32. n_volume    EQU    19 ; B
  33. n_dmabit    EQU    20 ; W
  34. n_toneportdirec    EQU    22 ; B
  35. n_toneportspeed    EQU    23 ; B
  36. n_wantedperiod    EQU    24 ; W
  37. n_vibratocmd    EQU    26 ; B
  38. n_vibratopos    EQU    27 ; B
  39. n_tremolocmd    EQU    28 ; B
  40. n_tremolopos    EQU    29 ; B
  41. n_wavecontrol    EQU    30 ; B
  42. n_glissfunk    EQU    31 ; B
  43. n_sampleoffset    EQU    32 ; B
  44. n_pattpos    EQU    33 ; B
  45. n_loopcount    EQU    34 ; B
  46. n_funkoffset    EQU    35 ; B
  47. n_wavestart    EQU    36 ; L
  48. n_reallength    EQU    40 ; W
  49.  
  50. mt_init    LEA    mt_data,A0
  51.     MOVE.L    A0,mt_SongDataPtr
  52.     MOVE.L    A0,A1
  53.     LEA    952(A1),A1
  54.     MOVEQ    #127,D0
  55.     MOVEQ    #0,D1
  56. mtloop    MOVE.L    D1,D2
  57.     SUBQ.W    #1,D0
  58. mtloop2    MOVE.B    (A1)+,D1
  59.     CMP.B    D2,D1
  60.     BGT.S    mtloop
  61.     DBRA    D0,mtloop2
  62.     ADDQ.B    #1,D2
  63.             
  64.     LEA    mt_SampleStarts(PC),A1
  65.     ASL.L    #8,D2
  66.     ASL.L    #2,D2
  67.     ADD.L    #1084,D2
  68.     ADD.L    A0,D2
  69.     MOVE.L    D2,A2
  70.     MOVEQ    #30,D0
  71. mtloop3    CLR.L    (A2)
  72.     MOVE.L    A2,(A1)+
  73.     MOVEQ    #0,D1
  74.     MOVE.W    42(A0),D1
  75.     ASL.L    #1,D1
  76.     ADD.L    D1,A2
  77.     ADD.L    #30,A0
  78.     DBRA    D0,mtloop3
  79.  
  80.     OR.B    #2,$BFE001
  81.     MOVE.B    #6,mt_speed
  82.     CLR.B    mt_counter
  83.     CLR.B    mt_SongPos
  84.     CLR.W    mt_PatternPos
  85. mt_end    CLR.W    $DFF0A8
  86.     CLR.W    $DFF0B8
  87.     CLR.W    $DFF0C8
  88.     CLR.W    $DFF0D8
  89.     MOVE.W    #$F,$DFF096
  90.     RTS
  91.  
  92. mt_music
  93.     MOVEM.L    D0-D4/A0-A6,-(SP)
  94.     ADDQ.B    #1,mt_counter
  95.     MOVE.B    mt_counter(PC),D0
  96.     CMP.B    mt_speed(PC),D0
  97.     BLO.S    mt_NoNewNote
  98.     CLR.B    mt_counter
  99.     TST.B    mt_PattDelTime2
  100.     BEQ.S    mt_GetNewNote
  101.     BSR.S    mt_NoNewAllChannels
  102.     BRA    mt_dskip
  103.  
  104. mt_NoNewNote
  105.     BSR.S    mt_NoNewAllChannels
  106.     BRA    mt_NoNewPosYet
  107.  
  108. mt_NoNewAllChannels
  109.     LEA    $DFF0A0,A5
  110.     LEA    mt_chan1temp(PC),A6
  111.     BSR    mt_CheckEfx
  112.     LEA    $DFF0B0,A5
  113.     LEA    mt_chan2temp(PC),A6
  114.     BSR    mt_CheckEfx
  115.     LEA    $DFF0C0,A5
  116.     LEA    mt_chan3temp(PC),A6
  117.     BSR    mt_CheckEfx
  118.     LEA    $DFF0D0,A5
  119.     LEA    mt_chan4temp(PC),A6
  120.     BRA    mt_CheckEfx
  121.  
  122. mt_GetNewNote
  123.     MOVE.L    mt_SongDataPtr(PC),A0
  124.     LEA    12(A0),A3
  125.     LEA    952(A0),A2    ;pattpo
  126.     LEA    1084(A0),A0    ;patterndata
  127.     MOVEQ    #0,D0
  128.     MOVEQ    #0,D1
  129.     MOVE.B    mt_SongPos(PC),D0
  130.     MOVE.B    (A2,D0.W),D1
  131.     ASL.L    #8,D1
  132.     ASL.L    #2,D1
  133.     ADD.W    mt_PatternPos(PC),D1
  134.     CLR.W    mt_DMACONtemp
  135.  
  136.     LEA    $DFF0A0,A5
  137.     LEA    mt_chan1temp(PC),A6
  138.     BSR.S    mt_PlayVoice
  139.     LEA    $DFF0B0,A5
  140.     LEA    mt_chan2temp(PC),A6
  141.     BSR.S    mt_PlayVoice
  142.     LEA    $DFF0C0,A5
  143.     LEA    mt_chan3temp(PC),A6
  144.     BSR.S    mt_PlayVoice
  145.     LEA    $DFF0D0,A5
  146.     LEA    mt_chan4temp(PC),A6
  147.     BSR.S    mt_PlayVoice
  148.     BRA    mt_SetDMA
  149.  
  150. mt_PlayVoice
  151.     TST.L    (A6)
  152.     BNE.S    mt_plvskip
  153.     BSR    mt_PerNop
  154. mt_plvskip
  155.     MOVE.L    (A0,D1.L),(A6)
  156.     ADDQ.L    #4,D1
  157.     MOVEQ    #0,D2
  158.     MOVE.B    n_cmd(A6),D2
  159.     AND.B    #$F0,D2
  160.     LSR.B    #4,D2
  161.     MOVE.B    (A6),D0
  162.     AND.B    #$F0,D0
  163.     OR.B    D0,D2
  164.     TST.B    D2
  165.     BEQ    mt_SetRegs
  166.     MOVEQ    #0,D3
  167.     LEA    mt_SampleStarts(PC),A1
  168.     MOVE    D2,D4
  169.     SUBQ.L    #1,D2
  170.     ASL.L    #2,D2
  171.     MULU    #30,D4
  172.     MOVE.L    (A1,D2.L),n_start(A6)
  173.     MOVE.W    (A3,D4.L),n_length(A6)
  174.     MOVE.W    (A3,D4.L),n_reallength(A6)
  175.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  176.     MOVE.B    3(A3,D4.L),n_volume(A6)
  177.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  178.     TST.W    D3
  179.     BEQ.S    mt_NoLoop
  180.     MOVE.L    n_start(A6),D2    ; Get start
  181.     ASL.W    #1,D3
  182.     ADD.L    D3,D2        ; Add repeat
  183.     MOVE.L    D2,n_loopstart(A6)
  184.     MOVE.L    D2,n_wavestart(A6)
  185.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  186.     ADD.W    6(A3,D4.L),D0    ; Add replen
  187.     MOVE.W    D0,n_length(A6)
  188.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  189.     MOVEQ    #0,D0
  190.     MOVE.B    n_volume(A6),D0
  191.     MOVE.W    D0,8(A5)    ; Set volume
  192.     BRA.S    mt_SetRegs
  193.  
  194. mt_NoLoop
  195.     MOVE.L    n_start(A6),D2
  196.     ADD.L    D3,D2
  197.     MOVE.L    D2,n_loopstart(A6)
  198.     MOVE.L    D2,n_wavestart(A6)
  199.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  200.     MOVEQ    #0,D0
  201.     MOVE.B    n_volume(A6),D0
  202.     MOVE.W    D0,8(A5)    ; Set volume
  203. mt_SetRegs
  204.     MOVE.W    (A6),D0
  205.     AND.W    #$0FFF,D0
  206.     BEQ    mt_CheckMoreEfx    ; If no note
  207.     MOVE.W    2(A6),D0
  208.     AND.W    #$0FF0,D0
  209.     CMP.W    #$0E50,D0
  210.     BEQ.S    mt_DoSetFineTune
  211.     MOVE.B    2(A6),D0
  212.     AND.B    #$0F,D0
  213.     CMP.B    #3,D0    ; TonePortamento
  214.     BEQ.S    mt_ChkTonePorta
  215.     CMP.B    #5,D0
  216.     BEQ.S    mt_ChkTonePorta
  217.     CMP.B    #9,D0    ; Sample Offset
  218.     BNE.S    mt_SetPeriod
  219.     BSR    mt_CheckMoreEfx
  220.     BRA.S    mt_SetPeriod
  221.  
  222. mt_DoSetFineTune
  223.     BSR    mt_SetFineTune
  224.     BRA.S    mt_SetPeriod
  225.  
  226. mt_ChkTonePorta
  227.     BSR    mt_SetTonePorta
  228.     BRA    mt_CheckMoreEfx
  229.  
  230. mt_SetPeriod
  231.     MOVEM.L    D0-D1/A0-A1,-(SP)
  232.     MOVE.W    (A6),D1
  233.     AND.W    #$0FFF,D1
  234.     LEA    mt_PeriodTable(PC),A1
  235.     MOVEQ    #0,D0
  236.     MOVEQ    #36,D7
  237. mt_ftuloop
  238.     CMP.W    (A1,D0.W),D1
  239.     BHS.S    mt_ftufound
  240.     ADDQ.L    #2,D0
  241.     DBRA    D7,mt_ftuloop
  242. mt_ftufound
  243.     MOVEQ    #0,D1
  244.     MOVE.B    n_finetune(A6),D1
  245.     MULU    #36*2,D1
  246.     ADD.L    D1,A1
  247.     MOVE.W    (A1,D0.W),n_period(A6)
  248.     MOVEM.L    (SP)+,D0-D1/A0-A1
  249.  
  250.     MOVE.W    2(A6),D0
  251.     AND.W    #$0FF0,D0
  252.     CMP.W    #$0ED0,D0 ; Notedelay
  253.     BEQ    mt_CheckMoreEfx
  254.  
  255.     MOVE.W    n_dmabit(A6),$DFF096
  256.     BTST    #2,n_wavecontrol(A6)
  257.     BNE.S    mt_vibnoc
  258.     CLR.B    n_vibratopos(A6)
  259. mt_vibnoc
  260.     BTST    #6,n_wavecontrol(A6)
  261.     BNE.S    mt_trenoc
  262.     CLR.B    n_tremolopos(A6)
  263. mt_trenoc
  264.     MOVE.L    n_start(A6),(A5)    ; Set start
  265.     MOVE.W    n_length(A6),4(A5)    ; Set length
  266.     MOVE.W    n_period(A6),D0
  267.     MOVE.W    D0,6(A5)        ; Set period
  268.     MOVE.W    n_dmabit(A6),D0
  269.     OR.W    D0,mt_DMACONtemp
  270.     BRA    mt_CheckMoreEfx
  271.  
  272. mt_SetDMA
  273.     MOVE.W    #300,D0
  274. mt_WaitDMA
  275.     DBRA    D0,mt_WaitDMA
  276.     MOVE.W    mt_DMACONtemp(PC),D0
  277.     OR.W    #$8000,D0
  278.     MOVE.W    D0,$DFF096
  279.     MOVE.W    #300,D0
  280. mt_WaitDMA2
  281.     DBRA    D0,mt_WaitDMA2
  282.  
  283.     LEA    $DFF000,A5
  284.     LEA    mt_chan4temp(PC),A6
  285.     MOVE.L    n_loopstart(A6),$D0(A5)
  286.     MOVE.W    n_replen(A6),$D4(A5)
  287.     LEA    mt_chan3temp(PC),A6
  288.     MOVE.L    n_loopstart(A6),$C0(A5)
  289.     MOVE.W    n_replen(A6),$C4(A5)
  290.     LEA    mt_chan2temp(PC),A6
  291.     MOVE.L    n_loopstart(A6),$B0(A5)
  292.     MOVE.W    n_replen(A6),$B4(A5)
  293.     LEA    mt_chan1temp(PC),A6
  294.     MOVE.L    n_loopstart(A6),$A0(A5)
  295.     MOVE.W    n_replen(A6),$A4(A5)
  296.  
  297. mt_dskip
  298.     ADD.W    #16,mt_PatternPos
  299.     MOVE.B    mt_PattDelTime,D0
  300.     BEQ.S    mt_dskc
  301.     MOVE.B    D0,mt_PattDelTime2
  302.     CLR.B    mt_PattDelTime
  303. mt_dskc    TST.B    mt_PattDelTime2
  304.     BEQ.S    mt_dska
  305.     SUBQ.B    #1,mt_PattDelTime2
  306.     BEQ.S    mt_dska
  307.     SUB.W    #16,mt_PatternPos
  308. mt_dska    TST.B    mt_PBreakFlag
  309.     BEQ.S    mt_nnpysk
  310.     SF    mt_PBreakFlag
  311.     MOVEQ    #0,D0
  312.     MOVE.B    mt_PBreakPos(PC),D0
  313.     CLR.B    mt_PBreakPos
  314.     LSL.W    #4,D0
  315.     MOVE.W    D0,mt_PatternPos
  316. mt_nnpysk
  317.     CMP.W    #1024,mt_PatternPos
  318.     BLO.S    mt_NoNewPosYet
  319. mt_NextPosition    
  320.     MOVEQ    #0,D0
  321.     MOVE.B    mt_PBreakPos(PC),D0
  322.     LSL.W    #4,D0
  323.     MOVE.W    D0,mt_PatternPos
  324.     CLR.B    mt_PBreakPos
  325.     CLR.B    mt_PosJumpFlag
  326.     ADDQ.B    #1,mt_SongPos
  327.     AND.B    #$7F,mt_SongPos
  328.     MOVE.B    mt_SongPos(PC),D1
  329.     MOVE.L    mt_SongDataPtr(PC),A0
  330.     CMP.B    950(A0),D1
  331.     BLO.S    mt_NoNewPosYet
  332.     CLR.B    mt_SongPos
  333. mt_NoNewPosYet    
  334.     TST.B    mt_PosJumpFlag
  335.     BNE.S    mt_NextPosition
  336.     MOVEM.L    (SP)+,D0-D4/A0-A6
  337.     RTS
  338.  
  339. mt_CheckEfx
  340.     BSR    mt_UpdateFunk
  341.     MOVE.W    n_cmd(A6),D0
  342.     AND.W    #$0FFF,D0
  343.     BEQ.S    mt_PerNop
  344.     MOVE.B    n_cmd(A6),D0
  345.     AND.B    #$0F,D0
  346.     BEQ.S    mt_Arpeggio
  347.     CMP.B    #1,D0
  348.     BEQ    mt_PortaUp
  349.     CMP.B    #2,D0
  350.     BEQ    mt_PortaDown
  351.     CMP.B    #3,D0
  352.     BEQ    mt_TonePortamento
  353.     CMP.B    #4,D0
  354.     BEQ    mt_Vibrato
  355.     CMP.B    #5,D0
  356.     BEQ    mt_TonePlusVolSlide
  357.     CMP.B    #6,D0
  358.     BEQ    mt_VibratoPlusVolSlide
  359.     CMP.B    #$E,D0
  360.     BEQ    mt_E_Commands
  361. SetBack    MOVE.W    n_period(A6),6(A5)
  362.     CMP.B    #7,D0
  363.     BEQ    mt_Tremolo
  364.     CMP.B    #$A,D0
  365.     BEQ    mt_VolumeSlide
  366. mt_Return2
  367.     RTS
  368.  
  369. mt_PerNop
  370.     MOVE.W    n_period(A6),6(A5)
  371.     RTS
  372.  
  373. mt_Arpeggio
  374.     MOVEQ    #0,D0
  375.     MOVE.B    mt_counter(PC),D0
  376.     DIVS    #3,D0
  377.     SWAP    D0
  378.     CMP.W    #0,D0
  379.     BEQ.S    mt_Arpeggio2
  380.     CMP.W    #2,D0
  381.     BEQ.S    mt_Arpeggio1
  382.     MOVEQ    #0,D0
  383.     MOVE.B    n_cmdlo(A6),D0
  384.     LSR.B    #4,D0
  385.     BRA.S    mt_Arpeggio3
  386.  
  387. mt_Arpeggio1
  388.     MOVEQ    #0,D0
  389.     MOVE.B    n_cmdlo(A6),D0
  390.     AND.B    #15,D0
  391.     BRA.S    mt_Arpeggio3
  392.  
  393. mt_Arpeggio2
  394.     MOVE.W    n_period(A6),D2
  395.     BRA.S    mt_Arpeggio4
  396.  
  397. mt_Arpeggio3
  398.     ASL.W    #1,D0
  399.     MOVEQ    #0,D1
  400.     MOVE.B    n_finetune(A6),D1
  401.     MULU    #36*2,D1
  402.     LEA    mt_PeriodTable(PC),A0
  403.     ADD.L    D1,A0
  404.     MOVEQ    #0,D1
  405.     MOVE.W    n_period(A6),D1
  406.     MOVEQ    #36,D7
  407. mt_arploop
  408.     MOVE.W    (A0,D0.W),D2
  409.     CMP.W    (A0),D1
  410.     BHS.S    mt_Arpeggio4
  411.     ADDQ.L    #2,A0
  412.     DBRA    D7,mt_arploop
  413.     RTS
  414.  
  415. mt_Arpeggio4
  416.     MOVE.W    D2,6(A5)
  417.     RTS
  418.  
  419. mt_FinePortaUp
  420.     TST.B    mt_counter
  421.     BNE.S    mt_Return2
  422.     MOVE.B    #$0F,mt_LowMask
  423. mt_PortaUp
  424.     MOVEQ    #0,D0
  425.     MOVE.B    n_cmdlo(A6),D0
  426.     AND.B    mt_LowMask(PC),D0
  427.     MOVE.B    #$FF,mt_LowMask
  428.     SUB.W    D0,n_period(A6)
  429.     MOVE.W    n_period(A6),D0
  430.     AND.W    #$0FFF,D0
  431.     CMP.W    #113,D0
  432.     BPL.S    mt_PortaUskip
  433.     AND.W    #$F000,n_period(A6)
  434.     OR.W    #113,n_period(A6)
  435. mt_PortaUskip
  436.     MOVE.W    n_period(A6),D0
  437.     AND.W    #$0FFF,D0
  438.     MOVE.W    D0,6(A5)
  439.     RTS    
  440.  
  441. mt_FinePortaDown
  442.     TST.B    mt_counter
  443.     BNE    mt_Return2
  444.     MOVE.B    #$0F,mt_LowMask
  445. mt_PortaDown
  446.     CLR.W    D0
  447.     MOVE.B    n_cmdlo(A6),D0
  448.     AND.B    mt_LowMask(PC),D0
  449.     MOVE.B    #$FF,mt_LowMask
  450.     ADD.W    D0,n_period(A6)
  451.     MOVE.W    n_period(A6),D0
  452.     AND.W    #$0FFF,D0
  453.     CMP.W    #856,D0
  454.     BMI.S    mt_PortaDskip
  455.     AND.W    #$F000,n_period(A6)
  456.     OR.W    #856,n_period(A6)
  457. mt_PortaDskip
  458.     MOVE.W    n_period(A6),D0
  459.     AND.W    #$0FFF,D0
  460.     MOVE.W    D0,6(A5)
  461.     RTS
  462.  
  463. mt_SetTonePorta
  464.     MOVE.L    A0,-(SP)
  465.     MOVE.W    (A6),D2
  466.     AND.W    #$0FFF,D2
  467.     MOVEQ    #0,D0
  468.     MOVE.B    n_finetune(A6),D0
  469.     MULU    #36*2,D0 ;37?
  470.     LEA    mt_PeriodTable(PC),A0
  471.     ADD.L    D0,A0
  472.     MOVEQ    #0,D0
  473. mt_StpLoop
  474.     CMP.W    (A0,D0.W),D2
  475.     BHS.S    mt_StpFound
  476.     ADDQ.W    #2,D0
  477.     CMP.W    #36*2,D0 ;37?
  478.     BLO.S    mt_StpLoop
  479.     MOVEQ    #35*2,D0
  480. mt_StpFound
  481.     MOVE.B    n_finetune(A6),D2
  482.     AND.B    #8,D2
  483.     BEQ.S    mt_StpGoss
  484.     TST.W    D0
  485.     BEQ.S    mt_StpGoss
  486.     SUBQ.W    #2,D0
  487. mt_StpGoss
  488.     MOVE.W    (A0,D0.W),D2
  489.     MOVE.L    (SP)+,A0
  490.     MOVE.W    D2,n_wantedperiod(A6)
  491.     MOVE.W    n_period(A6),D0
  492.     CLR.B    n_toneportdirec(A6)
  493.     CMP.W    D0,D2
  494.     BEQ.S    mt_ClearTonePorta
  495.     BGE    mt_Return2
  496.     MOVE.B    #1,n_toneportdirec(A6)
  497.     RTS
  498.  
  499. mt_ClearTonePorta
  500.     CLR.W    n_wantedperiod(A6)
  501.     RTS
  502.  
  503. mt_TonePortamento
  504.     MOVE.B    n_cmdlo(A6),D0
  505.     BEQ.S    mt_TonePortNoChange
  506.     MOVE.B    D0,n_toneportspeed(A6)
  507.     CLR.B    n_cmdlo(A6)
  508. mt_TonePortNoChange
  509.     TST.W    n_wantedperiod(A6)
  510.     BEQ    mt_Return2
  511.     MOVEQ    #0,D0
  512.     MOVE.B    n_toneportspeed(A6),D0
  513.     TST.B    n_toneportdirec(A6)
  514.     BNE.S    mt_TonePortaUp
  515. mt_TonePortaDown
  516.     ADD.W    D0,n_period(A6)
  517.     MOVE.W    n_wantedperiod(A6),D0
  518.     CMP.W    n_period(A6),D0
  519.     BGT.S    mt_TonePortaSetPer
  520.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  521.     CLR.W    n_wantedperiod(A6)
  522.     BRA.S    mt_TonePortaSetPer
  523.  
  524. mt_TonePortaUp
  525.     SUB.W    D0,n_period(A6)
  526.     MOVE.W    n_wantedperiod(A6),D0
  527.     CMP.W    n_period(A6),D0
  528.     BLT.S    mt_TonePortaSetPer
  529.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  530.     CLR.W    n_wantedperiod(A6)
  531.  
  532. mt_TonePortaSetPer
  533.     MOVE.W    n_period(A6),D2
  534.     MOVE.B    n_glissfunk(A6),D0
  535.     AND.B    #$0F,D0
  536.     BEQ.S    mt_GlissSkip
  537.     MOVEQ    #0,D0
  538.     MOVE.B    n_finetune(A6),D0
  539.     MULU    #36*2,D0
  540.     LEA    mt_PeriodTable(PC),A0
  541.     ADD.L    D0,A0
  542.     MOVEQ    #0,D0
  543. mt_GlissLoop
  544.     CMP.W    (A0,D0.W),D2
  545.     BHS.S    mt_GlissFound
  546.     ADDQ.W    #2,D0
  547.     CMP.W    #36*2,D0
  548.     BLO.S    mt_GlissLoop
  549.     MOVEQ    #35*2,D0
  550. mt_GlissFound
  551.     MOVE.W    (A0,D0.W),D2
  552. mt_GlissSkip
  553.     MOVE.W    D2,6(A5) ; Set period
  554.     RTS
  555.  
  556. mt_Vibrato
  557.     MOVE.B    n_cmdlo(A6),D0
  558.     BEQ.S    mt_Vibrato2
  559.     MOVE.B    n_vibratocmd(A6),D2
  560.     AND.B    #$0F,D0
  561.     BEQ.S    mt_vibskip
  562.     AND.B    #$F0,D2
  563.     OR.B    D0,D2
  564. mt_vibskip
  565.     MOVE.B    n_cmdlo(A6),D0
  566.     AND.B    #$F0,D0
  567.     BEQ.S    mt_vibskip2
  568.     AND.B    #$0F,D2
  569.     OR.B    D0,D2
  570. mt_vibskip2
  571.     MOVE.B    D2,n_vibratocmd(A6)
  572. mt_Vibrato2
  573.     MOVE.B    n_vibratopos(A6),D0
  574.     LEA    mt_VibratoTable(PC),A4
  575.     LSR.W    #2,D0
  576.     AND.W    #$001F,D0
  577.     MOVEQ    #0,D2
  578.     MOVE.B    n_wavecontrol(A6),D2
  579.     AND.B    #$03,D2
  580.     BEQ.S    mt_vib_sine
  581.     LSL.B    #3,D0
  582.     CMP.B    #1,D2
  583.     BEQ.S    mt_vib_rampdown
  584.     MOVE.B    #255,D2
  585.     BRA.S    mt_vib_set
  586. mt_vib_rampdown
  587.     TST.B    n_vibratopos(A6)
  588.     BPL.S    mt_vib_rampdown2
  589.     MOVE.B    #255,D2
  590.     SUB.B    D0,D2
  591.     BRA.S    mt_vib_set
  592. mt_vib_rampdown2
  593.     MOVE.B    D0,D2
  594.     BRA.S    mt_vib_set
  595. mt_vib_sine
  596.     MOVE.B    0(A4,D0.W),D2
  597. mt_vib_set
  598.     MOVE.B    n_vibratocmd(A6),D0
  599.     AND.W    #15,D0
  600.     MULU    D0,D2
  601.     LSR.W    #7,D2
  602.     MOVE.W    n_period(A6),D0
  603.     TST.B    n_vibratopos(A6)
  604.     BMI.S    mt_VibratoNeg
  605.     ADD.W    D2,D0
  606.     BRA.S    mt_Vibrato3
  607. mt_VibratoNeg
  608.     SUB.W    D2,D0
  609. mt_Vibrato3
  610.     MOVE.W    D0,6(A5)
  611.     MOVE.B    n_vibratocmd(A6),D0
  612.     LSR.W    #2,D0
  613.     AND.W    #$003C,D0
  614.     ADD.B    D0,n_vibratopos(A6)
  615.     RTS
  616.  
  617. mt_TonePlusVolSlide
  618.     BSR    mt_TonePortNoChange
  619.     BRA    mt_VolumeSlide
  620.  
  621. mt_VibratoPlusVolSlide
  622.     BSR.S    mt_Vibrato2
  623.     BRA    mt_VolumeSlide
  624.  
  625. mt_Tremolo
  626.     MOVE.B    n_cmdlo(A6),D0
  627.     BEQ.S    mt_Tremolo2
  628.     MOVE.B    n_tremolocmd(A6),D2
  629.     AND.B    #$0F,D0
  630.     BEQ.S    mt_treskip
  631.     AND.B    #$F0,D2
  632.     OR.B    D0,D2
  633. mt_treskip
  634.     MOVE.B    n_cmdlo(A6),D0
  635.     AND.B    #$F0,D0
  636.     BEQ.S    mt_treskip2
  637.     AND.B    #$0F,D2
  638.     OR.B    D0,D2
  639. mt_treskip2
  640.     MOVE.B    D2,n_tremolocmd(A6)
  641. mt_Tremolo2
  642.     MOVE.B    n_tremolopos(A6),D0
  643.     LEA    mt_VibratoTable(PC),A4
  644.     LSR.W    #2,D0
  645.     AND.W    #$001F,D0
  646.     MOVEQ    #0,D2
  647.     MOVE.B    n_wavecontrol(A6),D2
  648.     LSR.B    #4,D2
  649.     AND.B    #$03,D2
  650.     BEQ.S    mt_tre_sine
  651.     LSL.B    #3,D0
  652.     CMP.B    #1,D2
  653.     BEQ.S    mt_tre_rampdown
  654.     MOVE.B    #255,D2
  655.     BRA.S    mt_tre_set
  656. mt_tre_rampdown
  657.     TST.B    n_vibratopos(A6)
  658.     BPL.S    mt_tre_rampdown2
  659.     MOVE.B    #255,D2
  660.     SUB.B    D0,D2
  661.     BRA.S    mt_tre_set
  662. mt_tre_rampdown2
  663.     MOVE.B    D0,D2
  664.     BRA.S    mt_tre_set
  665. mt_tre_sine
  666.     MOVE.B    0(A4,D0.W),D2
  667. mt_tre_set
  668.     MOVE.B    n_tremolocmd(A6),D0
  669.     AND.W    #15,D0
  670.     MULU    D0,D2
  671.     LSR.W    #6,D2
  672.     MOVEQ    #0,D0
  673.     MOVE.B    n_volume(A6),D0
  674.     TST.B    n_tremolopos(A6)
  675.     BMI.S    mt_TremoloNeg
  676.     ADD.W    D2,D0
  677.     BRA.S    mt_Tremolo3
  678. mt_TremoloNeg
  679.     SUB.W    D2,D0
  680. mt_Tremolo3
  681.     BPL.S    mt_TremoloSkip
  682.     CLR.W    D0
  683. mt_TremoloSkip
  684.     CMP.W    #$40,D0
  685.     BLS.S    mt_TremoloOk
  686.     MOVE.W    #$40,D0
  687. mt_TremoloOk
  688.     MOVE.W    D0,8(A5)
  689.     MOVE.B    n_tremolocmd(A6),D0
  690.     LSR.W    #2,D0
  691.     AND.W    #$003C,D0
  692.     ADD.B    D0,n_tremolopos(A6)
  693.     RTS
  694.  
  695. mt_SampleOffset
  696.     MOVEQ    #0,D0
  697.     MOVE.B    n_cmdlo(A6),D0
  698.     BEQ.S    mt_sononew
  699.     MOVE.B    D0,n_sampleoffset(A6)
  700. mt_sononew
  701.     MOVE.B    n_sampleoffset(A6),D0
  702.     LSL.W    #7,D0
  703.     CMP.W    n_length(A6),D0
  704.     BGE.S    mt_sofskip
  705.     SUB.W    D0,n_length(A6)
  706.     LSL.W    #1,D0
  707.     ADD.L    D0,n_start(A6)
  708.     RTS
  709. mt_sofskip
  710.     MOVE.W    #$0001,n_length(A6)
  711.     RTS
  712.  
  713. mt_VolumeSlide
  714.     MOVEQ    #0,D0
  715.     MOVE.B    n_cmdlo(A6),D0
  716.     LSR.B    #4,D0
  717.     TST.B    D0
  718.     BEQ.S    mt_VolSlideDown
  719. mt_VolSlideUp
  720.     ADD.B    D0,n_volume(A6)
  721.     CMP.B    #$40,n_volume(A6)
  722.     BMI.S    mt_vsuskip
  723.     MOVE.B    #$40,n_volume(A6)
  724. mt_vsuskip
  725.     MOVE.B    n_volume(A6),D0
  726.     MOVE.W    D0,8(A5)
  727.     RTS
  728.  
  729. mt_VolSlideDown
  730.     MOVEQ    #0,D0
  731.     MOVE.B    n_cmdlo(A6),D0
  732.     AND.B    #$0F,D0
  733. mt_VolSlideDown2
  734.     SUB.B    D0,n_volume(A6)
  735.     BPL.S    mt_vsdskip
  736.     CLR.B    n_volume(A6)
  737. mt_vsdskip
  738.     MOVE.B    n_volume(A6),D0
  739.     MOVE.W    D0,8(A5)
  740.     RTS
  741.  
  742. mt_PositionJump
  743.     MOVE.B    n_cmdlo(A6),D0
  744.     SUBQ.B    #1,D0
  745.     MOVE.B    D0,mt_SongPos
  746. mt_pj2    CLR.B    mt_PBreakPos
  747.     ST     mt_PosJumpFlag
  748.     RTS
  749.  
  750. mt_VolumeChange
  751.     MOVEQ    #0,D0
  752.     MOVE.B    n_cmdlo(A6),D0
  753.     CMP.B    #$40,D0
  754.     BLS.S    mt_VolumeOk
  755.     MOVEQ    #$40,D0
  756. mt_VolumeOk
  757.     MOVE.B    D0,n_volume(A6)
  758.     MOVE.W    D0,8(A5)
  759.     RTS
  760.  
  761. mt_PatternBreak
  762.     MOVEQ    #0,D0
  763.     MOVE.B    n_cmdlo(A6),D0
  764.     MOVE.L    D0,D2
  765.     LSR.B    #4,D0
  766.     MULU    #10,D0
  767.     AND.B    #$0F,D2
  768.     ADD.B    D2,D0
  769.     CMP.B    #63,D0
  770.     BHI.S    mt_pj2
  771.     MOVE.B    D0,mt_PBreakPos
  772.     ST    mt_PosJumpFlag
  773.     RTS
  774.  
  775. mt_SetSpeed
  776.     MOVE.B    3(A6),D0
  777.     BEQ    mt_Return2
  778.     CLR.B    mt_counter
  779.     MOVE.B    D0,mt_speed
  780.     RTS
  781.  
  782. mt_CheckMoreEfx
  783.     BSR    mt_UpdateFunk
  784.     MOVE.B    2(A6),D0
  785.     AND.B    #$0F,D0
  786.     CMP.B    #$9,D0
  787.     BEQ    mt_SampleOffset
  788.     CMP.B    #$B,D0
  789.     BEQ    mt_PositionJump
  790.     CMP.B    #$D,D0
  791.     BEQ.S    mt_PatternBreak
  792.     CMP.B    #$E,D0
  793.     BEQ.S    mt_E_Commands
  794.     CMP.B    #$F,D0
  795.     BEQ.S    mt_SetSpeed
  796.     CMP.B    #$C,D0
  797.     BEQ    mt_VolumeChange
  798.     BRA    mt_PerNop
  799.  
  800. mt_E_Commands
  801.     MOVE.B    n_cmdlo(A6),D0
  802.     AND.B    #$F0,D0
  803.     LSR.B    #4,D0
  804.     BEQ.S    mt_FilterOnOff
  805.     CMP.B    #1,D0
  806.     BEQ    mt_FinePortaUp
  807.     CMP.B    #2,D0
  808.     BEQ    mt_FinePortaDown
  809.     CMP.B    #3,D0
  810.     BEQ.S    mt_SetGlissControl
  811.     CMP.B    #4,D0
  812.     BEQ    mt_SetVibratoControl
  813.     CMP.B    #5,D0
  814.     BEQ    mt_SetFineTune
  815.     CMP.B    #6,D0
  816.     BEQ    mt_JumpLoop
  817.     CMP.B    #7,D0
  818.     BEQ    mt_SetTremoloControl
  819.     CMP.B    #9,D0
  820.     BEQ    mt_RetrigNote
  821.     CMP.B    #$A,D0
  822.     BEQ    mt_VolumeFineUp
  823.     CMP.B    #$B,D0
  824.     BEQ    mt_VolumeFineDown
  825.     CMP.B    #$C,D0
  826.     BEQ    mt_NoteCut
  827.     CMP.B    #$D,D0
  828.     BEQ    mt_NoteDelay
  829.     CMP.B    #$E,D0
  830.     BEQ    mt_PatternDelay
  831.     CMP.B    #$F,D0
  832.     BEQ    mt_FunkIt
  833.     RTS
  834.  
  835. mt_FilterOnOff
  836.     MOVE.B    n_cmdlo(A6),D0
  837.     AND.B    #1,D0
  838.     ASL.B    #1,D0
  839.     AND.B    #$FD,$BFE001
  840.     OR.B    D0,$BFE001
  841.     RTS    
  842.  
  843. mt_SetGlissControl
  844.     MOVE.B    n_cmdlo(A6),D0
  845.     AND.B    #$0F,D0
  846.     AND.B    #$F0,n_glissfunk(A6)
  847.     OR.B    D0,n_glissfunk(A6)
  848.     RTS
  849.  
  850. mt_SetVibratoControl
  851.     MOVE.B    n_cmdlo(A6),D0
  852.     AND.B    #$0F,D0
  853.     AND.B    #$F0,n_wavecontrol(A6)
  854.     OR.B    D0,n_wavecontrol(A6)
  855.     RTS
  856.  
  857. mt_SetFineTune
  858.     MOVE.B    n_cmdlo(A6),D0
  859.     AND.B    #$0F,D0
  860.     MOVE.B    D0,n_finetune(A6)
  861.     RTS
  862.  
  863. mt_JumpLoop
  864.     TST.B    mt_counter
  865.     BNE    mt_Return2
  866.     MOVE.B    n_cmdlo(A6),D0
  867.     AND.B    #$0F,D0
  868.     BEQ.S    mt_SetLoop
  869.     TST.B    n_loopcount(A6)
  870.     BEQ.S    mt_jumpcnt
  871.     SUBQ.B    #1,n_loopcount(A6)
  872.     BEQ    mt_Return2
  873. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  874.     ST    mt_PBreakFlag
  875.     RTS
  876.  
  877. mt_jumpcnt
  878.     MOVE.B    D0,n_loopcount(A6)
  879.     BRA.S    mt_jmploop
  880.  
  881. mt_SetLoop
  882.     MOVE.W    mt_PatternPos(PC),D0
  883.     LSR.W    #4,D0
  884.     MOVE.B    D0,n_pattpos(A6)
  885.     RTS
  886.  
  887. mt_SetTremoloControl
  888.     MOVE.B    n_cmdlo(A6),D0
  889.     AND.B    #$0F,D0
  890.     LSL.B    #4,D0
  891.     AND.B    #$0F,n_wavecontrol(A6)
  892.     OR.B    D0,n_wavecontrol(A6)
  893.     RTS
  894.  
  895. mt_RetrigNote
  896.     MOVE.L    D1,-(SP)
  897.     MOVEQ    #0,D0
  898.     MOVE.B    n_cmdlo(A6),D0
  899.     AND.B    #$0F,D0
  900.     BEQ.S    mt_rtnend
  901.     MOVEQ    #0,D1
  902.     MOVE.B    mt_counter(PC),D1
  903.     BNE.S    mt_rtnskp
  904.     MOVE.W    (A6),D1
  905.     AND.W    #$0FFF,D1
  906.     BNE.S    mt_rtnend
  907.     MOVEQ    #0,D1
  908.     MOVE.B    mt_counter(PC),D1
  909. mt_rtnskp
  910.     DIVU    D0,D1
  911.     SWAP    D1
  912.     TST.W    D1
  913.     BNE.S    mt_rtnend
  914. mt_DoRetrig
  915.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  916.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  917.     MOVE.W    n_length(A6),4(A5)    ; Set length
  918.     MOVE.W    #300,D0
  919. mt_rtnloop1
  920.     DBRA    D0,mt_rtnloop1
  921.     MOVE.W    n_dmabit(A6),D0
  922.     BSET    #15,D0
  923.     MOVE.W    D0,$DFF096
  924.     MOVE.W    #300,D0
  925. mt_rtnloop2
  926.     DBRA    D0,mt_rtnloop2
  927.     MOVE.L    n_loopstart(A6),(A5)
  928.     MOVE.L    n_replen(A6),4(A5)
  929. mt_rtnend
  930.     MOVE.L    (SP)+,D1
  931.     RTS
  932.  
  933. mt_VolumeFineUp
  934.     TST.B    mt_counter
  935.     BNE    mt_Return2
  936.     MOVEQ    #0,D0
  937.     MOVE.B    n_cmdlo(A6),D0
  938.     AND.B    #$F,D0
  939.     BRA    mt_VolSlideUp
  940.  
  941. mt_VolumeFineDown
  942.     TST.B    mt_counter
  943.     BNE    mt_Return2
  944.     MOVEQ    #0,D0
  945.     MOVE.B    n_cmdlo(A6),D0
  946.     AND.B    #$0F,D0
  947.     BRA    mt_VolSlideDown2
  948.  
  949. mt_NoteCut
  950.     MOVEQ    #0,D0
  951.     MOVE.B    n_cmdlo(A6),D0
  952.     AND.B    #$0F,D0
  953.     CMP.B    mt_counter(PC),D0
  954.     BNE    mt_Return2
  955.     CLR.B    n_volume(A6)
  956.     MOVE.W    #0,8(A5)
  957.     RTS
  958.  
  959. mt_NoteDelay
  960.     MOVEQ    #0,D0
  961.     MOVE.B    n_cmdlo(A6),D0
  962.     AND.B    #$0F,D0
  963.     CMP.B    mt_Counter,D0
  964.     BNE    mt_Return2
  965.     MOVE.W    (A6),D0
  966.     BEQ    mt_Return2
  967.     MOVE.L    D1,-(SP)
  968.     BRA    mt_DoRetrig
  969.  
  970. mt_PatternDelay
  971.     TST.B    mt_counter
  972.     BNE    mt_Return2
  973.     MOVEQ    #0,D0
  974.     MOVE.B    n_cmdlo(A6),D0
  975.     AND.B    #$0F,D0
  976.     TST.B    mt_PattDelTime2
  977.     BNE    mt_Return2
  978.     ADDQ.B    #1,D0
  979.     MOVE.B    D0,mt_PattDelTime
  980.     RTS
  981.  
  982. mt_FunkIt
  983.     TST.B    mt_counter
  984.     BNE    mt_Return2
  985.     MOVE.B    n_cmdlo(A6),D0
  986.     AND.B    #$0F,D0
  987.     LSL.B    #4,D0
  988.     AND.B    #$0F,n_glissfunk(A6)
  989.     OR.B    D0,n_glissfunk(A6)
  990.     TST.B    D0
  991.     BEQ    mt_Return2
  992. mt_UpdateFunk
  993.     MOVEM.L    A0/D1,-(SP)
  994.     MOVEQ    #0,D0
  995.     MOVE.B    n_glissfunk(A6),D0
  996.     LSR.B    #4,D0
  997.     BEQ.S    mt_funkend
  998.     LEA    mt_FunkTable(PC),A0
  999.     MOVE.B    (A0,D0.W),D0
  1000.     ADD.B    D0,n_funkoffset(A6)
  1001.     BTST    #7,n_funkoffset(A6)
  1002.     BEQ.S    mt_funkend
  1003.     CLR.B    n_funkoffset(A6)
  1004.  
  1005.     MOVE.L    n_loopstart(A6),D0
  1006.     MOVEQ    #0,D1
  1007.     MOVE.W    n_replen(A6),D1
  1008.     ADD.L    D1,D0
  1009.     ADD.L    D1,D0
  1010.     MOVE.L    n_wavestart(A6),A0
  1011.     ADDQ.L    #1,A0
  1012.     CMP.L    D0,A0
  1013.     BLO.S    mt_funkok
  1014.     MOVE.L    n_loopstart(A6),A0
  1015. mt_funkok
  1016.     MOVE.L    A0,n_wavestart(A6)
  1017.     MOVEQ    #-1,D0
  1018.     SUB.B    (A0),D0
  1019.     MOVE.B    D0,(A0)
  1020. mt_funkend
  1021.     MOVEM.L    (SP)+,A0/D1
  1022.     RTS
  1023.  
  1024.  
  1025. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1026.  
  1027. mt_VibratoTable    
  1028.     dc.b   0, 24, 49, 74, 97,120,141,161
  1029.     dc.b 180,197,212,224,235,244,250,253
  1030.     dc.b 255,253,250,244,235,224,212,197
  1031.     dc.b 180,161,141,120, 97, 74, 49, 24
  1032.  
  1033. mt_PeriodTable
  1034. ; Tuning 0, Normal
  1035.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1036.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1037.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1038. ; Tuning 1
  1039.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1040.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1041.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1042. ; Tuning 2
  1043.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1044.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1045.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1046. ; Tuning 3
  1047.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1048.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1049.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1050. ; Tuning 4
  1051.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1052.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1053.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1054. ; Tuning 5
  1055.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1056.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1057.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1058. ; Tuning 6
  1059.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1060.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1061.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1062. ; Tuning 7
  1063.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1064.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1065.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1066. ; Tuning -8
  1067.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1068.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1069.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1070. ; Tuning -7
  1071.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1072.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1073.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1074. ; Tuning -6
  1075.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1076.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1077.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1078. ; Tuning -5
  1079.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1080.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1081.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1082. ; Tuning -4
  1083.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1084.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1085.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1086. ; Tuning -3
  1087.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1088.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1089.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1090. ; Tuning -2
  1091.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1092.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1093.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1094. ; Tuning -1
  1095.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1096.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1097.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1098.  
  1099. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1100. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1101. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1102. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1103.  
  1104. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1105.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1106.  
  1107. mt_SongDataPtr    dc.l 0
  1108.  
  1109. mt_speed    dc.b 6
  1110. mt_counter    dc.b 0
  1111. mt_SongPos    dc.b 0
  1112. mt_PBreakPos    dc.b 0
  1113. mt_PosJumpFlag    dc.b 0
  1114. mt_PBreakFlag    dc.b 0
  1115. mt_LowMask    dc.b 0
  1116. mt_PattDelTime    dc.b 0
  1117. mt_PattDelTime2    dc.b 0,0
  1118.  
  1119. mt_PatternPos    dc.w 0
  1120. mt_DMACONtemp    dc.w 0
  1121.  
  1122. ;/* End of File */
  1123.